package com.powernode.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;

/**
 * <p>
 * 订单
 * </p>
 *
 * @author Juice
 * @since 2023-02-09
 */
@Getter
@Setter
@TableName("oms_order")
public class Order implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 订单id/编号
     * 使用雪花算法生成，适用于分布式系统中id的生成，微服务在多个服务器上运行时可以保证生成id的唯一性
     * 由64位组成，第一位符号位（数字正负）,之后的41位是时间戳，之后的10位是机器id，之后的12位是序列号
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long orderId;

    /**
     * 用户id
     */
    private Long userId;

    /**
     * 订单总金额
     */
    @NotNull(message = "订单总金额不能为空")
    private BigDecimal totalPrice;

    /**
     * 订单描述
     */
    @TableField(value = "`desc`")
    private String desc;

    /**
     * 状态：1-待付款，2-待收货，3-待评价，4-已取消
     */
    private Integer status;

    /**
     * 订单备注
     */
    private String remarks;

    /**
     * 订单创建时间
     */
    private Date createTime;

    /**
     * 付款方式：1-微信，2-支付宝
     */
    @NotNull(message = "请选择付款方式")
    private Integer payType;

    /**
     * 付款时间
     */
    private Date payTime;

    /**
     * 配送开始时间
     */
    private Date consignTime;

    /**
     * 配送完成时间
     */
    private Date finishTime;

    /**
     * 订单关闭时间
     */
    private Date closeTime;

    /**
     * 订单商品
     */
    @TableField(exist = false)
    private List<OrderItem> orderItems;

    /**
     * 订单配送地址
     */
    @TableField(exist = false)
    private OrderAddress orderAddress;
}
